"""
功能描述 ：
编写人 ：
编写日期 ：
实现逻辑 ：
    1- ......
        1.1- ......
    2- ......
        2.1- ......
"""
# #定义函数
# def fun():
#     print('我是函数')
# #调用函数
# fun()
# #函数参数
# def sum_num(a,b):
#     result = a+b
#     print(result)
# sum_num(1,2)
# #函数返回值
# def buy():
#     return '烟'
#
# goods = buy()
# print(goods)
#
# #函数嵌套
# def testB():
#     print('---- testB start----')
#     print('这里是testB函数执行的代码...(省略)...')
#     print('---- testB end----')
#
# def testA():
#     print('---- testA start----')
#     testB()
#     print('---- testA end----')
#
# testA()
# #函数应用
# #打印多条横线
# def print_line():
#     print('_' * 20)
#
# def print_lines(num):
#     i = 0
#     while i < num:
#         print_line()
#         i +=1
# print_lines()

#变量作用域：局部变量：函数内的变量，只能在函数内部使用；全局变量：函数外定义的变量，所有函数都可以使用

# a = 100
# def A():
#     print('函数A')
#     print('a')
# def B():
#     print('函数B')
#     print("b")
#     a = 200
#     global a
#     a = 300
#     print(a)
# A()
# B()
# print(f'全局变量a={a}')

# 返回值：函数返回多个值时，返回值默认为元组类型，return后面可以接列表、元组和字典
def num():
    return 1,2
result = num()
print(result)
# 函数的参数
# 位置参数：调用函数时，根据函数定义的参数位置、个数传递参数，传递和定义的参数位置、个数必须一致
def user(name, age, gender):
    print(f"姓名{name},年龄{age},性别{gender}")
user('chenyu',18,'男')

# 关键字参数：调用函数时，使用键=值的形式传递，可以与参数的定义顺序不一致。调用函数时，如有位置参数，必须在关键字参数前面，如有多个关键字参数，关键字参数之间可以无序
def user(name, age, gender):
    print(f"姓名{name},年龄{age},性别{gender}")
user(name='chen',age=18,gender='nan',)

# 缺省参数：定义参数时，用键=值的形式定义，调用函数时，可以不传缺省参数的值，默认传函数定义时定义的该参数的值
def user(name, age, gender,huoji='M78星云'):
    print(f"姓名{name},年龄{age},性别{gender},来自{huoji}")
user(name='chen',age=18,gender='nan',)
user(name='王涛',age=19,gender='女',huoji='diqiu')

# 不定长参数：即可变参数，用于不确定调用函数时传递的参数个数，甚至可以不传参数，此时可以用包裹位置参数，或包裹关键字参数，这两种都是组包
def fun4(*args):
    print(args)
fun4('tom','女',14)
list1 = ['tom','女',14]
fun4(list1)
fun4(*list1)
## # 函数的参数之不定长参数---包裹关键字传递
def fun5(**kwargs):
    print(kwargs)
fun5(name='Tose', sex='女', age=21)
dict1 = {'name':'Tose','sex':'女','age':21}
fun5(**dict1)
# # 拆包-元组
def return_num():
    return 100,200
num1,num2 = return_num()
print(num1)
print(num2)
# # 拆包-字典
dict1 = {'name': 'TOM', 'age': 18}
a,b = dict1
print(a)
print(b)
print(dict1[a])
print(dict1[b])

#文件操作
import os
#文件重名
os.name('text.txt','test1.txt')
#删除文件
os.remove("test备份.txt")
#新建文件夹
os.mkdir('test.txt')
#获取当前目录
print(os.getcwd())
#改变默认目录
os.chdir("D:\youyou\\fuxi")
print(os.getcwd())
#获取当前目录列表
print(os.listdir('D:D:\youyong\\fuxi'))

# 需求：⽤户输⼊当前⽬录下任意⽂件名，程序完成对该⽂件的备份功能
# (备份⽂件名为xx[备份]后缀，例如：test[备份].txt)
# # 输入目标文件名
# old_name = input("请输⼊您要备份的⽂件名：")
# # 提取文件后缀点的小标
# index = old_name.find('.')
# print(index)               # 输出.
# print(old_name[:index])    # 输出点前面的文件名
# print(old_name[index:])    # 输出.txt
# # 建立新的文件名
# new_name = old_name[:index]+'备份'+old_name[index:]
# print(new_name)
# # 打开文件
# old_f = open(old_name,'rb')
# new_f = open(new_name,'wb')
# # 将源文件数据写入备份文件
# while True:
#     con = old_f.read(1024)
#     if len(con) == 0:
#         break
#     new_f.write(con)
# # 关闭文件
# old_f.close()
# new_f.close()